﻿package com.badibadi.mytools;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import com.badibadi.activity.BaseActivity;
import com.badibadi.uniclubber.R;
import com.lidroid.xutils.util.LogUtils;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.net.rtp.RtpStream;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;

/**
 * 选择上传的图片是相册还是自己照
 * 
 * @author Administrator
 * 
 */
public class SelectPicLayoutActivity extends BaseActivity {
	// @ViewInject(id = R.id.dialog_layout, click = "onFClick")
	private LinearLayout dialogLayout;// s所有的布局
	// @ViewInject(id = R.id.btn_take_photo, click = "onFClick")
	protected Button takePhotoBtn;// 选择拍照
	// @ViewInject(id = R.id.btn_pick_photo, click = "onFClick")
	protected Button pickPhotoBtn;// 从相机选择
	// @ViewInject(id = R.id.btn_cancel, click = "onFClick")
	protected Button cancelBtn;// 取消
	private String timeString;// 返回的图片名称

	private String cutnameString;// 剪切后的图片的名字
	private String filename;// 把保存剪切的路径
	private String cutting = " ";// 如果不为空就不需要裁剪
	private String Cutting = "";// 如果为yes，则边为长方形如果为空，则正方形

	private String save_filename;//

	private Intent lastIntent;
	/***
	 * 使用照相机拍照获取图片
	 */
	public static final int SELECT_PIC_BY_TACK_PHOTO = 1;
	/***
	 * 使用相册中的图片
	 */
	public static final int SELECT_PIC_BY_PICK_PHOTO = 2;

	/***
	 * 从Intent获取图片路径的KEY
	 */
	public static final String KEY_PHOTO_PATH = "photo_path";

	protected static final String TAG = "SelectPicActivity";

	private static float w = 600;

	// float h;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.select_pic_layout);
		lastIntent = getIntent();
		w = getScreenSize(SCREENW);
		// h = getScreenSize(SCREENH);
		cutting = getIntent().getStringExtra("CUTTING");
		Cutting = getIntent().getStringExtra("Cutting");// 如果为yes，则边为长方形如果为空，则正方形
	}

	public void onFClick(View v) {
		Intent intent = null;
		switch (v.getId()) {
		case R.id.dialog_layout:// 单击任意地方就取消
			finish();
			break;
		case R.id.btn_take_photo:// 选择照相
			/**
			 * 下面这句还是老样子，调用快速拍照功能，至于为什么叫快速拍照，大家可以参考如下官方
			 * 文档，you_sdk_path/docs/guide/topics/media/camera.html
			 * 我刚看的时候因为太长就认真看，其实是错的，这个里面有用的太多了，所以大家不要认为
			 * 官方文档太长了就不看了，其实是错的，这个地方小马也错了，必须改正
			 */
			Date date = new Date(System.currentTimeMillis());
			SimpleDateFormat dateFormat = new SimpleDateFormat(
					"'IMG'_yyyyMMddHHmmss");
			timeString = dateFormat.format(date);
			// 创建存储图片的路径，没有sd卡就不能使用照相功能
			if (!IOUtils.hasSDcard()) {
				Toast.makeText(SelectPicLayoutActivity.this, "没有内存卡，无法使用相机功能",
						3000).show();
				return;
			}
			intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
			intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(
					Environment.getExternalStorageDirectory() + "/DCIM/Camera",
					timeString + ".jpg")));
			startActivityForResult(intent, 2);
			break;
		case R.id.btn_pick_photo:// 选择从相册中获取图片
			/**
			 * 刚开始，我自己也不知道ACTION_PICK是干嘛的，后来直接看Intent源码，
			 * 可以发现里面很多东西，Intent是个很强大的东西，大家一定仔细阅读下
			 */
			intent = new Intent(Intent.ACTION_PICK, null);
			/**
			 * 下面这句话，与其它方式写是一样的效果，如果：
			 * intent.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
			 * intent.setType(""image/*");设置数据类型
			 * 如果朋友们要限制上传到服务器的图片类型时可以直接写如："image/jpeg 、 image/png等的类型"
			 * 这个地方小马有个疑问，希望高手解答下：就是这个数据URI与类型为什么要分两种形式来写呀？有什么区别？
			 */
//			   
			if (cutting != null && cutting.equals("no")) {
				Intent intent1 = new Intent();
				intent.setType("image/*");
				intent.setAction(Intent.ACTION_GET_CONTENT);
				startActivityForResult(intent, 1);

			} else {
				intent.setDataAndType(
						MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
				startActivityForResult(intent, 1);
			}

			break;
		case R.id.btn_cancel:// 取消
			finish();
			break;

		default:
			break;
		}
	}

	/**
	 * 直接从相机获取图片
	 */
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//		   
		switch (requestCode) {
		case 1:// 如果是直接从相册获取
//			LogUtils.d("data=" + data);
			if (data != null) {
				zoomImg(data.getData());
			}

			break;
		case 2:// 如果是调用相机拍照时
				// File temp = new
				// File(Environment.getExternalStorageDirectory()
				// + "/xiaoma.jpg");
			// 给图片设置名字和路径
			File temp = new File(Environment.getExternalStorageDirectory()
					.getPath() + "/DCIM/Camera/" + timeString + ".jpg");
			zoomImg(Uri.fromFile(temp));
			break;

		case 3:// 取得裁剪后的图片
			/**
			 * 非空判断大家一定要验证，如果不验证的话， 在剪裁之后如果发现不满意，要重新裁剪，丢弃
			 * 当前功能时，会报NullException，小马只 在这个地方加下，大家可以根据不同情况在合适的 地方做判断处理类似情况
			 * 
			 */
//			LogUtils.d("获取到的截图的参数是" + data);
			// if (data != null) {
			// setPicToView(data);
			// }
//			   
			if (resultCode == -1) {
				if (save_filename != null
						&& (save_filename.endsWith(".png")
								|| save_filename.endsWith(".PNG")
								|| save_filename.endsWith(".jpg") || save_filename
									.endsWith(".JPG"))) {
					lastIntent.putExtra(KEY_PHOTO_PATH, save_filename);
//					   
					setResult(Activity.RESULT_OK, lastIntent);
					finish();
				} else {
					Toast.makeText(this,
							getResources().getString(R.string.l_xb175),
							Toast.LENGTH_LONG).show();
				}
			}
			break;
		default:
			break;
		}
		super.onActivityResult(requestCode, resultCode, data);
	}

	// /**
	// * 保存裁剪之后的图片数据
	// *
	// * @param picdata
	// */
	// private void setPicToView(Intent picdata) {
	// LogUtils.d("187" + picdata);
	// if (picdata.getExtras() != null) {
	// Bundle extras = picdata.getExtras();
	// LogUtils.d("190" + extras);
	// if (extras != null) {
	// if (extras.getParcelable("data") != null) {
	// Bitmap photo = extras.getParcelable("data");
	//    
	// + photo.getHeight());
	// Drawable drawable = new BitmapDrawable(photo);
	// /**
	// * 下面注释的方法是将裁剪之后的图片以Base64Coder的字符方式上 传到服务器，QQ头像上传采用的方法跟这个类似
	// */
	// savaBitmap(photo);
	//
	// if (filename != null
	// && (filename.endsWith(".png")
	// || filename.endsWith(".PNG")
	// || filename.endsWith(".jpg") || filename
	// .endsWith(".JPG"))) {
	// lastIntent.putExtra(KEY_PHOTO_PATH, filename);
	//    
	// setResult(Activity.RESULT_OK, lastIntent);
	// finish();
	// } else {
	// Toast.makeText(this,
	// getResources().getString(R.string.l_xb175),
	// Toast.LENGTH_LONG).show();
	// }
	// }
	//
	// }
	// }
	//
	// }

	// <<<<<<< .mine

	// //将剪切后的图片保存到本地图片上！
	// public void savaBitmap(Bitmap bitmap)
	// {
	// Date date = new Date(System.currentTimeMillis());
	// SimpleDateFormat dateFormat = new
	// SimpleDateFormat("'IMG'_yyyyMMddHHmmss");
	// cutnameString= dateFormat.format(date);
	// filename=Environment.getExternalStorageDirectory().getPath()+"/"+cutnameString+".jpg";
	// File f = new File(filename);
	// FileOutputStream fOut = null;
	// try
	// {
	// f.createNewFile();
	// fOut = new FileOutputStream(f);
	// } catch (Exception e)
	// {
	//    
	// }
	// bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fOut);//把Bitmap对象解析成流
	// try
	// {
	// fOut.flush();
	// fOut.close();
	// } catch (IOException e)
	// {
	//    
	// }
	//
	//
	// }

	// =======

	// 将剪切后的图片保存到本地图片上！
	// public void savaBitmap(Bitmap bitmap) {
	// Date date = new Date(System.currentTimeMillis());
	// SimpleDateFormat dateFormat = new SimpleDateFormat(
	// "'IMG'_yyyyMMddHHmmss");
	// cutnameString = dateFormat.format(date);
	// filename = Environment.getExternalStorageDirectory().getPath() + "/"
	// + cutnameString + ".png";
	// File f = new File(filename);
	// FileOutputStream fOut = null;
	// try {
	// f.createNewFile();
	// fOut = new FileOutputStream(f);
	// } catch (Exception e) {
	//    
	// }
	// bitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);// 把Bitmap对象解析成流
	// try {
	// fOut.flush();
	// fOut.close();
	// } catch (IOException e) {
	//    
	// }
	//
	// }

	private String GetPhotoName() {
		Date date = new Date(System.currentTimeMillis());
		SimpleDateFormat dateFormat = new SimpleDateFormat(
				"'IMG'_yyyyMMddHHmmss");
		cutnameString = dateFormat.format(date);

		// filename = Environment.getExternalStorageDirectory().getPath() + "/"
		// + cutnameString + ".png";
		// File f = new File(filename);
		// FileOutputStream fOut = null;
		// try {
		// f.createNewFile();
		// fOut = new FileOutputStream(f);
		// } catch (Exception e) {
		//    
		// }
		// bitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);//
		// 把Bitmap对象解析成流
		// try {
		// fOut.flush();
		// fOut.close();
		// } catch (IOException e) {
		//    
		// }

		save_filename = Environment.getExternalStorageDirectory().getPath()
				+ "/" + cutnameString + ".png";
//		   
		return save_filename;
	}

	// >>>>>>> .r258
	// /**
	// * 裁剪图片方法实现
	// *
	// * @param uri
	// */
	// public void startPhotoZoom(Uri uri) {
	// LogUtils.d("为什么没运行这里");
	// /*
	// * 至于下面这个Intent的ACTION是怎么知道的，大家可以看下自己路径下的如下网页
	// * yourself_sdk_path/docs/reference/android/content/Intent.html
	// * 直接在里面Ctrl+F搜：CROP ，之前小马没仔细看过，其实安卓系统早已经有自带图片裁剪功能, 是直接调本地库的，小马不懂C C++
	// * 这个不做详细了解去了，有轮子就用轮子，不再研究轮子是怎么 制做的了...吼吼
	// */
	//
	// Intent intent = new Intent("com.android.camera.action.CROP");
	// intent.setDataAndType(uri, "image/*");
	// // 下面这个crop=true是设置在开启的Intent中设置显示的VIEW可裁剪
	// intent.putExtra("crop", "true");
	// // aspectX aspectY 是宽高的比例
	//
	// // outputX outputY 是裁剪图片宽高
	//    
	// if (Cutting != null && Cutting.equals("yes")) {
	// intent.putExtra("aspectX", 2);
	// intent.putExtra("aspectY", 1);
	// intent.putExtra("outputX", ((int) w));// 720
	// intent.putExtra("outputY", ((int) w / 2));// 360
	//    
	// } else {
	// intent.putExtra("aspectX", 1);
	// intent.putExtra("aspectY", 1);
	// intent.putExtra("outputX", 300);
	// intent.putExtra("outputY", 300);
	//    
	// }
	// intent.putExtra("noFaceDetection", true);
	// intent.putExtra("outputFormat", Bitmap.CompressFormat.PNG.toString());
	// // intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
	// intent.putExtra("return-data", true);
	// startActivityForResult(intent, 3);
	//    
	// }

	private void zoomImg(Uri uri) {
		Intent intent = new Intent("com.android.camera.action.CROP");

		intent.setDataAndType(uri, "image/*");// 剪切图片路径

		intent.putExtra("crop", "true");

		// outputX outputY 是裁剪图片宽高

//		   
		if (Cutting != null && Cutting.equals("yes")) {
			intent.putExtra("aspectX", 2);
			intent.putExtra("aspectY", 1);
			intent.putExtra("outputX", ((int) w));// 720//((int) w)
			intent.putExtra("outputY", ((int) w / 2));// 360//((int) w / 2)

		} else {
			intent.putExtra("aspectX", 1);
			intent.putExtra("aspectY", 1);
			intent.putExtra("outputX", 300);
			intent.putExtra("outputY", 300);

//			   
		}
		// intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
		intent.putExtra("outputFormat", Bitmap.CompressFormat.PNG.toString());
		intent.putExtra("return-data", true);
		intent.putExtra("scale", true);
		intent.putExtra(MediaStore.EXTRA_OUTPUT,
				Uri.fromFile(new File(GetPhotoName())));// 保存图片路径
		intent.putExtra("return-data", false);
		intent.putExtra("outputFormat", Bitmap.CompressFormat.PNG.toString());
		intent.putExtra("noFaceDetection", true); // no face detection
		startActivityForResult(intent, 3);
	}

}
